using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using CompanyX.Insurance.La.DataContracts;
//using CompanyX.Insurance.La.FaultContracts;

namespace CompanyX.Insurance.La.ServiceContracts
{
    /// <summary>
    /// This is the interface definition for Life &amp; Annuity re-insurance
    /// </summary>
    /// <remarks>ACORD v2.18.02 compliant (includes custom schema extensions for operation faults)</remarks>
    [XmlSerializerFormat]
    [ServiceContract(Name = "Reinsurance", Namespace = "urn:CompanyX.Insurance.La.ServiceContracts")]
    public interface IReinsurance
    {
        /// <summary>
        /// This transaction is used to exchange insured and policy coverage detail for reinsurance purposes. The message 
        /// will be used for both ceded and assumed reinsurance. Where there are multiple segments of reinsurance from more 
        /// than one reinsurer on the same policy, the "clean" way to handle it is to have the cedent send a separate 
        /// transaction for each reinsurer. Those multiple transactions can still be sent within the envelope of a single 
        /// physical message.
        /// </summary>
        /// <param name="request">TXLife Request Data</param>
        /// <returns>TXLife Response Data</returns>
        [OperationContract(Name = "GetCoverageDetailsForReinsurance")]
        //[FaultContract(typeof(GetCoverageDetailsForReinsuranceFt))]
        [return: MessageParameter(Name = "TXLifeResponse")]
        TXLifeResponse GetCoverageDetailsForReinsurance([MessageParameter(Name = "TXLifeRequest")]TXLifeRequest request);

        /// <summary>
        /// This transaction is used by companies to exchange information regarding a facultative request, response or offer 
        /// for insurance coverage that may be reinsured. The message will be used for both ceded and assumed reinsurance.
        /// </summary>
        /// <param name="request">TXLife Request Data</param>
        /// <returns>TXLife Response Data</returns>
        [OperationContract(Name = "GetFacultativeCoverageDetailsForReinsurance")]
        //[FaultContract(typeof(GetFacultativeCoverageDetailsForReinsuranceFt))]
        [return: MessageParameter(Name = "TXLifeResponse")]
        TXLifeResponse GetFacultativeCoverageDetailsForReinsurance([MessageParameter(Name = "TXLifeRequest")]TXLifeRequest request);
    }
}
